#include "../../src/cli.h"
#include "../../src/ser.h"
#include "stdio.h"

void imprimir_server(int cliente, int codigo, void *data, int size, void *objeto){
  printf("SERVER Se recibe mensaje del cliente %d. Codigo %s, Objeto %d, ", cliente, conexion_describir_status(codigo), (int)objeto);
  if(data!=0)
    printf("Los datos son %d \"%s\".", size, (char*)data);
  printf("\n");
}

void imprimir_client(int codigo, void *data, int size, void *objeto){
  printf("CLIENTE Se recibe mensaje . Codigo %s, Objeto %d, ", conexion_describir_status(codigo), (int)objeto);
  if(data!=0)
    printf("Los datos son %d \"%s\".", size, (char*)data);
  printf("\n");
}

void server_echo(int cliente, int codigo, void *data, int size, void *objeto){
  if(codigo==CON_DATOS_RECIBIDOS)
    ser_enviar(cliente, data, size);
}

int print_status(){
  int a, s, c;
  ser_status(&a);
  cli_status(&c);
  if(ser_status_cliente(111, &s)==0)
    printf("STATUS SERVER ACCEPT: %s, SERVER: %s, CLIENT %s \n", conexion_describir_status(a), conexion_describir_status(s), conexion_describir_status(c));
  else
    printf("STATUS SERVER ACCEPT: %s, CLIENT %s \n", conexion_describir_status(a), conexion_describir_status(c));
}

int main(int argc, char **argv){

  cli_iniciar();
//INICIANDO EL SERVIDOR
  ser_suscribir(server_echo, (void*)888);
  ser_suscribir(imprimir_server, (void*)999);
  ser_iniciar(555);
  print_status();

//INICIANDO EL CLIENTE
  cli_suscribir(imprimir_client, (void*)777);
  cli_conectar("el servidor");
  print_status();

//INTERCAMBIANDO MENSAJES  
int i;
for(i=0; i<10; i++){
  printf("---------------------------------------------------\n");
  int j;
  for(j=0; j<10; j++){
    print_status();
    ser_procesar();
  }
  cli_enviar("Hola Mundo!", 12);
  cli_enviar("Hola Mundo!", 12);
  cli_enviar("Hola Mundo!", 12);
  ser_enviar(111, "Saraza Mundo!", 20);
}

//TERMINANDO EL SERVER
  ser_dessuscribir((void*)999);
  ser_dessuscribir((void*)888);
  ser_terminar();

//TERMINANDO EL CLIENTE
  cli_dessuscribir((void*)777);
  cli_terminar();

  return 0;
}

